package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.request.*;
import org.dxy.api.dto.response.RouteProcessDTO;
import org.dxy.api.response.R;
import org.dxy.infrastructure.entity.query.RouteViewEntity;

import java.util.List;

/**
 * 工艺路线应用服务接口
 */
public interface RouteApplicationService {
    
    /**
     * 创建工艺路线
     */
    R<Long> create(CreateRouteRequest request);
    
    /**
     * 更新工艺路线
     */
    R<Void> update(Long routeId, UpdateRouteRequest request);
    
    /**
     * 启用工艺路线
     */
    R<Void> enable(Long routeId);
    
    /**
     * 禁用工艺路线
     */
    R<Void> disable(Long routeId);
    
    /**
     * 发布工艺路线
     */
    R<Void> publish(Long routeId);
    
    /**
     * 归档工艺路线
     */
    R<Void> archive(Long routeId);
    
    /**
     * 添加步骤
     */
    R<Void> assignProcesses(Long routeId, RouteAssignProcessesRequest request);
    
    /**
     * 移除步骤
     */
    R<Void> removeStep(Long routeId, RouteRemoveStepRequest request);
    
    /**
     * 重新排序步骤
     */
    R<Void> reorderSteps(Long routeId, RouteReorderStepRequest request);
    
    /**
     * 更新步骤
     */
    R<Void> updateStep(Long routeId, RouteStepUpdateRequest request);
    
    /**
     * 分页查询工艺路线列表
     */
    R<Page<RouteViewEntity>> list(Page<RouteViewEntity> page, RouteViewEntity query);
    
    /**
     * 根据ID查询工艺路线详情
     */
    R<RouteViewEntity> getById(Long routeId);
    
    /**
     * 根据状态查询工艺路线列表
     */
    R<Page<RouteViewEntity>> getByStatus(Page<RouteViewEntity> page, String status);
    
    /**
     * 查询工艺路线的工序列表
     */
    R<List<RouteProcessDTO>> getRouteProcesses(Long routeId);
    
    /**
     * 删除工艺路线
     */
    R<Void> delete(Long routeId);
    
    /**
     * 批量删除工艺路线
     */
    R<Void> batchDelete(RouteBatchDeleteRequest request);
}